查看原文
其他

【第1846期】Node.js 在 2020 年有什么新东西

Node地下铁 前端早读课 2020-10-12

前言

了解2020 年 Node.js 的发布计划。今日早读文章由@Node地下铁分享。

正文从这开始~~

2019 年,Node.js 已经10岁了,而 NPM 上可用的包数量也超过了 100 万个。Node.js 本身的下载数也仍在上升,同比上年增长 40%。另一个重要的里程碑是 Node.js 最近加入了 OpenJS 基金会,该基金会承诺改善项目的健康度和可持续性,并加强与整个 JavaScript 社区的协作。

如你所见,在短时间内发生了很多事情!Node.js 社区每年都有增长势头,2020 年没有丝毫放缓的迹象。在 Node.js 的下一个主要版本中,正在研究许多有趣的特性。在本文中,将会探讨 Node.js 社区在 2020 年值得期待的一些重要更新。

Node.js 13 有什么新功能?

在本文成文时最新版本是 Node.js 13,有很多功能和更新可以在 2020 年之前开始使用,下面是一些亮点:

  • ECMAScript 模块

  • WebAssembly 支持

  • 诊断报告

  • 对日期、时间、数字和货币格式提供全面的国际化支持

  • QUIC 协议支持

  • V8 JavaScript 引擎性能更新

在详细了解这些更新之前,让我们先看看 Node.js 的发布计划。

2020 年 Node.js 的发布计划

每 6 个月发布一个新的 Major 版本,分别在 10 月和 4 月。此主要版本称为当前版本。截至本文撰写之时,Node.js 的当前版本为 13,于 2019 年 10 月发布。

奇数版本(如v9、v11、v13)每年 10 月发布,时间很短不被视为已准备好投入生产。可以认为奇数版本是测试版,为了测试新特性和引入 Node.js 下一个偶数版本的变更。

偶数版本(如v8、v10、v12)每年 4 月发布。发布后,以前的奇数版本将停止接收更新。虽然比奇数版本更稳定,但在未来 6 个月内仍将积极开发更新,可以把前 6 个月看作是一个发布候选期。

一旦一个偶数版本经过 6 个月,就进入了一个新的生命阶段,称为长期支持(LTS)。LTS 阶段可以被视为可以被应用于生产环境,在接下来的 12 个月中,LTS 版本以不破坏任何现有应用的目的进行 bug 修复、安全更新和其他改进。

在 LTS 之后,有一个最后的维护阶段。维护阶段为 18 个月,在此阶段中只会进行严重的错误和安全修复。经过 18 个月的维护,将被视为寿命结束(EOL),不再进行支持。

预计 2020 年的发布时间表

预计在 2020 年会以下面的时间表发布:

2020年1-3月
  • 13.x 是当前版本,并积极开发

  • 10.x 和 12.x 为 LTS

2020年4月
  • 14.x 发布并成为当前版本

  • 14.x 发布后,13.x 工作立即停止

  • 10.x 进入维护阶段

2020年10月
  • 15.x 发布并成为当前版本

  • 14.x 进入LTS

  • 12.x 进入维护

注:由于 8.x 的生命周期结束(EOL)依赖于 OpenSSL-1.0.2,因此计划在 2019 年底结束,OpenSSL-1.0.2 也计划在 2019 年底结束。如果你还没有准备好,请计划起来将 8.x 应用程序升级到 10.x 或 12.x。

支持 ECMAScript 模块

从 v13.2.0 开始,Node.js 将支持传统的 CommonJS 模块和新的 ECMAScript(ES) 标准模块。这意味着将可以使用 import 和 export 语法,您可能已经在浏览器中尝试过了。另外,需要注意的是 Node.js 中的 ES 模块在默认情况下启用了 JavaScript Strict 模式,因此不需要在每个文件的顶部指定 "use strict"。

  1. // message file

  2. asyncfunction sendMessage { ... }

  3. export{ sendMessage };

  4. // index file

  5. import{ sendMessage } from"./message";

但是,仍然需要额外做一些事情,让 Node.js 知道您正在使用 ES 模块。最常用的两种方法是使用 .mjs 文件扩展名或在最近的 package.json 中指定"type": "module"。

选项一:重命名 .js 文件为 .mjs 文件;

选项二:更新项目根 package.json,或者增加一个 package.json 到包含 ES 模块的目录来指定 type 和module;

  1. {

  2. "type": "module"

  3. }

还有一种方法,在根 package.json 文件中启用 ES 模块,然后重命名所有 CommonJS 文件为 .cjs 扩展名。

Node.js 可以导入 WebAssembly 模块

除了支持 ES 模块外,还可以导入 WebAssembly(Wasm)模块!WebAssembly 模块是一种可移植的二进制格式,可以比 JavaScript 更快地解析并以本机速度执行。WebAssembly 模块可以使用诸如 C/C++、Go、C#、Java、Python、Elixir、Rust 等语言来建构。

截至本文撰写时,WebAssembly 模块支持仍处于试验阶段。要启用此功能,必须在执行 Node.js 时传递命令行参数。例如:

  1. node --experimental-wasm-modules index.js

下面是一个例子,假设有一个图像处理库为 WebAssembly 模块实现。使用这个 WebAssembly 模块的语法可能如下所示。

  1. import* as imageUtils from"./imageUtils.wasm";

  2. import* as fs from"fs";

  3. ( async() => {

  4. const image = await fs.promises.readFile( "./image.png");

  5. const updatedImage = await imageUtils.rotate90degrees( image );

  6. } )();

还可以使用 Node.js 中新的动态 import() 语句导入 WebAssembly 模块。

  1. "use strict";

  2. const fs = require("fs");

  3. ( async() => {

  4. const imageUtils = awaitimport( "./imageUtils.wasm");

  5. const image = await fs.promises.readFile( "./image.png");

  6. const updatedImage = await imageUtils.rotate90degrees( image );

  7. } )();

WebAssembly系统接口(WASI)

与 JavaScript 类似,WebAssembly 在设计时亦考虑了安全性,以防止访问不被预期的底层操作系统。但是,在您可控的情况下有些时会受益于 WebAssembly 的能力,来进行一些系统级别的调用。

这就是新的 WebAssembly 系统接口(WASI),WASI 被设计成一个标准接口,用于调用底层系统,如主机应用程序、本机操作系统等。

最初的 WASI 支持最近被提交到 Node.js 项目。WASI 是 2020 年 Node.js 另一个激动人心的特性!

2020 将推出诊断报告

诊断报告是人类可读的 JSON 格式的进程信息摘要,包括调用堆栈、操作系统信息、加载的模块和其它可以帮助应用程序的有用数据。这些报告可以在未处理的异常、致命错误、进程信号或使用新的 process.report API 时触发。Node.js 可以配置将诊断报告保存到指定的文件夹和文件名。

截至本文撰写之时,诊断报告仍在实验阶段。要启用此功能,必须在执行 Node.js 时传递命令行参数。例如:

  1. node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js

2020 国际化支持将加大

从 v13.x 开始,Node.js 使用完整的 ICU(International Components for Unicode),ICU 是一个成熟而流行的全球化库。ICU 包括对格式化数字、日期、时间和货币、执行时间计算和字符串比较,以及在 Unicode 和其他字符集之间转换文本的支持。

2020 的其他 Node.js 更新
  • QUIC 协议支持:提供更高性能和可靠性的现代传输协议;

  • 更好的 Python 3 构建支持:到 2020 年,应该可以使用 Python3 构建 Node.js 和本机模块;

  • 更新的 V8 JavaScript 引擎:V8 v7.8 和 7.9 提高了性能和 Wasm 支持;

  • 稳定的 Worker Threads API:Node.js 中的 Worker Threads 支持并行与 CPU 密集型的 JavaScript 操作;

进一步了解 Node.js、JavaScript 和 安全性

这篇文章只是在 2020 年为改进 Node.js 所做的所有努力中的一个开始!如果您有兴趣随时了解最新的更改或以某种方式参与其中,Node.js 网站上有一个对 Node.js 做出贡献的方法列表。

关于本文 译文:https://mp.weixin.qq.com/s/RGTjSaY_knfXMAgecPV5Ag 作者:@David Neal 原文:https://developer.okta.com/blog/2019/12/04/whats-new-nodejs-2020

为你推荐


【第1828期】种草 ES2020 新特性


【第1835期】llhttp是如何使Node.js性能翻倍的?


【译】WebAssembly 1.0成为W3C推荐标准,也是在浏览器中运行的第四种语言

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存